// BarcodeScanner.js
export default class BarcodeScanner {
    constructor() {
        this.barcodeBuffer = ''; // 存储扫码枪输入的字符
        this.timeoutId = null;   // 超时定时器ID
        this.debounceTime = 300; // 防抖时间（单位：毫秒）
        this.init();
    }

    // 初始化事件监听
    init() {
        window.removeEventListener('keydown', this.handleKeyDown);
        window.addEventListener('keydown', this.handleKeyDown.bind(this));
    }

    // 处理按键事件
    
    handleKeyDown(event) {
        // 忽略修饰键（如Shift、Ctrl等）
        if (event.key.length > 1) return;

        // 如果按下回车键，表示扫码结束
        if (event.key === 'Enter') {
            this.clearTimeout();
            this.processBarcode(this.barcodeBuffer.trim());
            this.clearBuffer();
            return;
        }

        // 将字符添加到缓冲区
        this.barcodeBuffer += event.key;

        // 设置防抖逻辑
        this.clearTimeout();
        this.timeoutId = setTimeout(() => {
            this.processBarcode(this.barcodeBuffer.trim());
            this.clearBuffer();
        }, this.debounceTime);
    }

    // 处理扫码数据
    processBarcode(barcode) {
        if (!barcode) return; // 如果扫码数据为空，直接返回

        try {
            // 调用外部处理函数
            this.handleBarcode(barcode);
        } catch (error) {
            console.error('Error processing barcode:', error);
        }
    }

    // 清空缓冲区
    clearBuffer() {
        this.barcodeBuffer = '';
    }

    // 清除超时定时器
    clearTimeout() {
        if (this.timeoutId) {
            clearTimeout(this.timeoutId);
            this.timeoutId = null;
        }
    }

    // 外部处理扫码数据的函数（需由使用者实现）
    handleBarcode(barcode) {
        console.log('Scanned barcode:', barcode);
        // 在这里实现扫码后的业务逻辑
    }
}